ホームに戻る
出典 :
POD - C++入門 C++11 - Wikipedia POD型とnon-POD型 - C++と色々 Plain Old Data | 闇夜のC++ C++0xにおけるPODの定義 - 本の虫 is_pod - cpprefjp C++日本語リファレンス POD 型のデフォルト初期化 - Qiita C++98 C++03 の POD - つーさのくーかん
関連 :
C++におけるクラスと構造体の違い C++11 タプル
目次 :

Plain Old Data (POD)とは

C言語の構造体、または共用体と互換性のある オブジェクトレイアウト(型)のこと。
データが宣言通りの順序で並ぶことが保証されるため、C言語とのデータ共有に用いることができ、memcpy() 、memset() でコピー、初期化できる。

PODである条件

C++03

C++11

C++11(以降)では条件がC++03よりも緩和されている。
ここで、コンストラクタ、デストラクタ、演算子が trivial である、とは
を意味する。

C++03ではすべての非静的 (non-static) メンバが public である必要があるが、C++11では public / private / protected のいずれか一つに統一されていればよい。

POD型であることのチェック (C++11以降)

std::is_pod<> を用いることで確認できる。
#include <type_traits> // POD型 class C_Hoge { : }; // non-POD型 class C_Fuga { // non-trivial なデフォルトコンストラクタ C_Fuga() {} }; void main() { std::cout << std::boolalpha; //< bool を英字で出力 std::cout << std::is_pod<C_Hoge>::value << '\n'; std::cout << std::is_pod<C_Fuga>::value << '\n'; }
実行結果
true false